#include "finder.h"
#include <QFile>
#include <QTextStream>
#include <QStringList>
#include <QApplication>
#include <QProgressDialog>
#include <QDebug>
#include <QProgressBar>

Finder::Finder(QProgressBar * p, QObject *parent) :
	QObject(parent), l(0), progress(p){
//	str = "gfgf";
//	l = str.size();
//	w = "aeae";
//	qDebug()<<collate();
}
//

bool Finder::collate(){
	if(w.length() >= l){
		QString wu = getUnique(w); // Получу уникальные символы из начала слова, равного l. Обрезание по l заложено в getUnique.
		QString stru = getUnique(str);
		if(stru.size() == wu.size()){
			QString str2 = str;
			int n = stru.size();
			for(int i = 0; i < n; ++i)
				str2.replace(stru.at(i), wu.at(i));
			return str2 == w;
		}else
			return false;
	}else
		return false;
}

QStringList Finder::find(const QString &s){
	QStringList rez;
	str = s;
	l = str.size();
	QFile f("words.txt", this);
	if(f.open(QIODevice::ReadOnly | QIODevice::Text));else
		qDebug()<<trUtf8("Ошибка при открытии файла словаря.");
	QTextStream in(&f);
	int i = 0;
	while (!in.atEnd()) {
		progress->setValue(i);
		++i;
		in>>w;
		if(collate()) // Если кусок слова совпадает с шаблоном
			if((rez.size()?rez.at(rez.size()-1)!=w:true))
				// И не встретился на прошлом шаге.
				// Добавлю его в результат.
				rez.append(w);
		qApp->processEvents(); // Выполнить все события, а то цикл выполняется долго.
	}
	progress->setValue(nS);
	f.close();
	return rez;
}

QStringList Finder::findWithoutDouble(const QString &s){
	QStringList rez;
	str = s;
	l = str.size();

	for(int i = 0; i < dictionary.size(); ++i) {
		progress->setValue(i);
		w = dictionary.at(i);
		if(collate()) // Если кусок слова совпадает с шаблоном
			if((rez.size()?rez.at(rez.size()-1)!=w:true)){
				// И не встретился на прошлом шаге.
				// Добавлю его в результат.
				rez.append(w);
			}
		qApp->processEvents(); // Выполнить все события, а то цикл выполняется долго.
	}
	progress->setValue(nS);
	return rez;
}

void Finder::loadDictionary(){
//-- Открою файл.----------------------------------------------
	QFile f("words.txt", this);
	if(f.open(QIODevice::ReadOnly | QIODevice::Text));else
		qDebug()<<trUtf8("Ошибка при открытии файла словаря.");
//-------------------------------------------------------------
	QTextStream in(&f);
	while (!in.atEnd()) {
		dictionary<<in.readLine();
	}
}
